package IOLearn;



import org.junit.jupiter.api.Test;

import java.io.*;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-06 0:36
 * @description 转换流的使用
 * 处理流之二：
 *  1.转换流：属于字符流
 *  InputStreamReader：将一个字节的输入流转换为字符的输入流
 *  OutputStreamWriter：将一个字符的输出流转换为字节的输出流
 *  2.作用：提供字节流与字符流之间的转换
 *
 *  3.解码：字节、字节数组 --> 字符数组、字符串
 *    编码：字符数组、字符串 --> 字节、字节数组
 *  4.字符集
 *    ASCII：美国标准信息交换码
 *      用一个字节的7位可以表示
 *    ISO8859-1：拉丁码表。欧中码表
 *      用一个字节的8位表示
 *    GB2312：中国的中文编码表。最多两个字节编码所有字符
 *    GBK：中国的中文编码表升级，融合了更多的中文字符号，最多两个字节编码
 *    Unicode:国际标准码，融合了目前人类使用的所有字符，为每个字符分配唯一的字符码。所有文字都可用两个字节表示
 *    UTF-8：变长的编码方式，可用1-4个字节来表示一个字符
 *
 */
public class InputOutputStreamTest  {

    @Test
    public void test() throws IOException {
        FileInputStream fis=new FileInputStream("hello1.txt");
        //InputStreamReader isr=new InputStreamReader(fis);//使用系统默认字符集
        //指明字符集：根据文件当初存的时候使用的字符集为准
        InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
        char[] cbuf=new char[10];
        int len;
        while((len=isr.read(cbuf))!=-1){
            String str=new String(cbuf,0,len);
            System.out.print(str);
        }

        fis.close();
        isr.close();

    }

    /**
     * 综合使用input与output
     */
    @Test
    public void test1() throws IOException{
        File f1=new File("D:\\Java Learn\\IOLearnTestFile\\test1\\dbcp.txt");
        File f2=new File("D:\\Java Learn\\IOLearnTestFile\\test1\\dbcp_gbk.txt");
        FileInputStream fis=new FileInputStream(f1);
        FileOutputStream fos=new FileOutputStream(f2);

        InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
        OutputStreamWriter osw=new OutputStreamWriter(fos,"gbk");

        char[] buf=new char[10];
        int len;
        while((len=isr.read(buf))!=-1){
            osw.write(buf,0,len);
        }

        isr.close();
        osw.close();



    }

}
